When I turn on my Macintosh, I get a black screen with a "sad Macintosh" face and the numbers 020016. There is no listing for this error code in any of my manuals. What does it mean?
The particular error code that appears with the "sad Macintosh" is not as important as WHEN it occurs. If the Macintosh can start up from a different system diskette, then the problem is probably with the system software on the other disk. System problems are usually identified when you get a "happy Macintosh" face and the "Welcome to Macintosh" screen before the "sad Macintosh."
If the "sad Macintosh" face appears immediately at power up, that usually suggests an issue with the logic board or memory. Try starting up from a floppy disk before assuming it's a hardware problem.
Sad Mac Error Codes Description
===============================
On the Original ROMs (Macintosh 128k, 512k, 512ke, Plus):
When you press the interrupt button on the side of your Macintosh when starting up, you should get a sad Mac icon with '0F000D' and some bits cycling under the icon indicating it is performing a memory test.
This numeric code is in two parts:
• The first two characters are the class code. The class code tells what
part of the diagnostic program found the error.
• The second four are the sub code. The sub class code tells what the error
was. In the case of a bad RAM chip, the sub class identifies the bad chip
(this was very helpful to homegrown upgraders).
Begin_Table
Class Code Sub Code
---------- --------
1 = ROM test failed Meaningless
2 = Memory test - bus subtest identifies bad chips
3 = Memory test - byte write identifies bad chips
4 = Memory test - Mod3 test identifies bad chips
5 = Memory test - address uniqueness identifies bad chips
Single Chip Identification
Data Bit Location Sub Code Bits
-------- -------- -------------
0 F5 0001
1 F6 0002
2 F7 0004
3 F8 0008
4 F9 0010
5 F10 0020
6 F11 0040
7 F12 0080
8 G5 0100
9 G6 0200
10 G7 0400
11 G8 0800
12 G9 1000
13 G10 2000
14 G11 4000
15 G12 8000
Class Code Sub Code
---------- --------
F = Exception 0001 Bus error
0002 Address error
0003 Illegal instruction
0004 Zero divide
0005 Check instruction
0006 Traps instruction
0007 Privilege violation
0008 Trace
0009 Line 1010
000A Line 1111
000B Other exception
000C Nothing
000D NMI (normal indication)
0064 Couldn’t Read System File into Memory
Macintosh SE & Macintosh II ROMs:
---------------------------------
The Sad Mac error codes have been changed to incorporate additional power for testing and to support the 32-bit world. Generally, the same codes are used for 68000 exceptions as the Macintosh, however they are displayed differently.
The traditional Macintosh error codes are displayed like this:
0F0003
Where “F” indicates an exception occurred, and “3” indicates an illegal instruction occurred. On the Macintosh SE and II, the display would appear:
0000000F
00000003
*Please note that 00000003 is a hex number.*
The new power–on error codes have the following format:
XXXXYYYY
ZZZZZZZZ
Where XXXX is internal test manager state information (ignore this), YYYY contains codes that indicate either an exception code, or the test number for a power on test failure. The ZZZZZZZZ code contains additional failure information to help track down the problem.
YYYY Error Codes:
-----------------
$0001 The ROM checksum test failed. Ignore the Z field.
$0002 The first small chunk of RAM to be tested failed. The Z field
indicates which RAM Bit(s) failed. This small chunk of RAM is
always in Bank B.
Example: $AABBCCDD
AA=8 bit mask for bits 31-24
BB=8 bit mask for bits 23-16
CC=8 bit mask for bits 15-8
DD=8 bit mask for bits 7-0
$0003 The RAM test failed while testing bank B, after passing the chunk
tested for code $0002. The Z field indicates which bits failed as
in code $0002.
$0004 The RAM test failed while testing bank A. The Z field indicates
which bits failed as in code $0002.
$0005 The RAM External addressing test failed. The Z field indicates a
failed address line.
$0006 Unable to properly address the VIA1 chip. The Z field is not
applicable.
$0007 Unable to properly address the VIA2 chip (Macintosh II only). The Z
field is not applicable.
$0008 Unable to properly access the Front Desk Bus. The Z field is not
applicable.
$0009 Unable to properly access the MMU. The Z field is not applicable.
$000A Unable to properly access NuBus. The Z field is not applicable.
$000B Unable to properly access the SCSI Chip. The Z field is not
applicable.
$000C Unable to properly access the IWM chip. The Z field is not
applicable.
$000D Unable to properly access the SCC Chip. The Z field is not
applicable.
$000E Failed Data Bus test. The Z field indicated the bad bit(s) as a
32-bit mask for bits 0-31. This may indicate either a bad SIMM or
data bus failure.
$000F Reserved for Macintosh compatibility.
$FFxx A 680xx exception occurred during power on testing.
The xx indicates the exception:
$01 — Bus Error
$02 — Address Error
$03 — Illegal Instruction Error
$04 — Zero Divide
$05 — Check Instruction
$06 — cpTrapCC, Trap CC, Trap V
$07 — Privilege violation
$08 — Trace
$09 — Line A
$0A — Line F
$0B — unassigned
$0C — CP protocol violation
$0D — Format exception
$0E — Spurious interrupt
$0F — Trap 0–15 exception
$10 — Interrupt Level 1
$11 — Interrupt Level 2
$12 — Interrupt Level 3
$13 — Interrupt Level 4
$14 — Interrupt Level 5
$15 — Interrupt Level 6
$16 — Interrupt Level 7
$17 — FPCP bra or set on unordered condition
$18 — FPCP inexact result
$19 — FPCP divide by zero
$1A — FPCP underflow
$1B — FPCP operand error
$1C — FPCP overflow
$1D — FPCP signalling NAN
$1E — PMMU configuration
$1F — PMMU illegal operation
$20 — PMMU access level violation
Macintosh Portable ROMs:
------------------------
The bootup code in the Macintosh Portable contains a series of startup tests that are run to ensure that the fundamental operations of the machine are working properly. If any of those tests fail, a Sad Mac icon appears on the screen with a code below that describes what failure occurred. Here is a typical example of a Sad Mac display with an error code below it:
SAD MAC CODE
05460203 = (D7.L)
000OB6DB = (D6.L)
The two codes are actually the contents of the two CPU data registers D6 and D7. The upper word (upper 4 hex digits, in this case 0546) of D7 contains miscellaneous flags that are used by the start-up test routines and are unimportant to just about everybody except a few test engineers within Apple. The lower word of D7 is the major error code. The major error code identifies the general area the test routines were in when a failure occurred. D6 is the minor error and usually contains additional information about the failure, something like a failed bit mask.
SAD MAC CODE BROKEN DOWN
Test Flags Major Error
---------- -----------
0546 0203
Minor Error Minor Error
----------- -----------
0000 B6DB
The major error is further broken into the upper byte that contains the number of any 68000 exception that occurred ($00 meaning that no exception occurred), and the lower byte that usually contains the test that was being run at the time of failure. If an unexpected exception occurred during a particular test, then the exception number is logically ORed into the major error code. This way both the exception that occurred as well as the test that was running can be decoded from the major error code:
SAD MAC CODE FURTHER BROKEN DOWN
68000 Exception Test Code
--------------- -----------
02 03
In this example, the code says that an address error exception ($0200) occurred during the RAM test for Bank A ($03); $0200 ORed with $03 = $0203.
Major Error Codes
-----------------
Below is a brief description of the various test codes that might appear in the major error code:
**Warning**: Some of these codes may mean slightly different things in Macintosh models other than the Macintosh Portable. These descriptions describe specifically how they are used in the Macintosh Portable.
$01 - ROM test failed. Minor error code is $FFFF, means nothing.
$02 - RAM test failed. Minor error code indicates which RAM bits failed.
$05 - RAM external addressing test failed. Minor error code indicates a
failed address line.
$06 - Unable to properly access the VIA 1 chip during VIA
initialization. Minor error code not applicable.
$08 - Data bus test at location eight bytes off of top of memory failed.
Minor error code indicates the bad bits as a 16–bit mask for bits
15–00.
This may indicate either a bad RAM chip or data bus failure.
$0B - Unable to properly access the SCSI chip. Minor error code not
applicable.
$0C - Unable to properly access the IWM (or SWIM) chip. Minor error code
not applicable.
$0D - Not applicable to Macintosh Portable. Unable to properly access the
SCC chip.
Minor error code not applicable.
$0E - Data bus test at location $0 failed. Minor error code indicates
the bad bits as a 16–bit mask for bits 15–00. This may indicate
either a bad RAM chip or data bus failure.
$10 - Video RAM test failed. Minor error code indicates which RAM bits
failed.
$11 - Video RAM addressing test failed. Minor error code contains the
following: upper word = failed address (16-bit)
msb of lower word = data written
lsb of lower word = data read
Data value written also indicates which address line is being
actively tested.
$12 - Deleted
$13 - Deleted
$14 - Power Manager processor was unable to turn on all the power to the
board. This may have been due to a communication problem with the
Power Manager. If so, the minor error code contains a Power Manager
error code, explained in the next section.
$15 - Power Manager failed its self-test. Minor error code contains the
following: msw = error status of transmission to power manager.
lsw = Power Manager self-test results (0 means it
passed, non-zero means it failed)
$16 - A failure occurred while trying to size and configure the RAM.
Minor error code not applicable.
Minor error codes—Power Manager Processor Failures
If a communication problem occurs during communication with the Power Manager, the following error codes will appear somewhere in the minor error code (usually in the lower half of the code, but not always):
$CD38 Power Manager was never ready to start handshake.
$CD37 Timed out waiting for reply to initial handshake.
$CD36 During a send, Power Manager did not start a handshake.
$CD35 During a send, Power Manager did not finish a handshake.
$CD34 During a receive, Power Manager did not start a handshake.
$CD33 During a receive, Power Manager did not finish a handshake.
Diagnostic Code Summary
-----------------------
Below is a summarized version of the Sad Mac error codes:
Test Codes
$01 ROM checksum test.
$02 RAM test.
$05 RAM addressing test.
$06 VIA 1 chip access.
$08 Data bus test at top of memory.
$0B SCSI chip access.
$0C IWM (or SWIM) chip access.
$0D Not applicable to Macintosh Portable. SCC chip access.
$0E Data bus test at location $0.
$10 Video RAM test.
$11 Video RAM addressing test.
$14 Power Manager board power on.
$15 Power Manager self-test.
$16 RAM sizing.
Power Manager Communication Error Codes
---------------------------------------
$CD38 Initial handshake.
$CD37 No reply to initial handshake.
$CD36 During send, no start of a handshake.
$CD35 During a send, no finish of a handshake.
$CD34 During a receive, no start of a handshake.
$CD33 During a receive, no finish of a handshake.
CPU Exception Codes (as used by the startup tests)